﻿using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using FinanceAPI.Model;
using FinanceAPI.Core;
using FinanceAPI.Services;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.EntityFrameworkCore;

namespace FinanceAPI.Controllers
{
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        private readonly FinanceDbContext _context;
        private readonly VourcherService _vourcherService;
        private readonly IOptions<MonthlyCalcDay> _settings;

        public ValuesController(FinanceDbContext context, VourcherService vourcherService, IOptions<MonthlyCalcDay> settings)
        {
            _context = context;
            _vourcherService = vourcherService;
            _settings = settings;
        }
        // GET api/values
        /// <summary>
        /// 重新计算接口
        /// </summary>
        /// <param name="groupCode"></param>
        /// <param name="groupName"></param>
        /// <param name="logger"></param>
        /// <param name="factory"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<string> Get([FromQuery]string groupCode, [FromQuery] string groupName, [FromServices]ILogger<ValuesController> logger, [FromServices]ILoggerFactory factory)
        {

            //var isMonthlyCalc = _settings.Value.IsMonthlyCalc;
            //var day = _settings.Value.CalcDay;
            //var startdate = DateTime.Now.AddDays(1 - DateTime.Now.Day).AddMonths(-1).ToString("yyyy-MM-dd");//获取上个月第一天
            //var enddate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); //当前时间
            //var monthLastDay = DateTime.Now.AddDays(1 - DateTime.Now.Day).AddDays(-1);//上一月最后一天

            //factory.CreateLogger("NewFile").LogInformation("test");


            //  return await _vourcherService.Test();

            if (string.IsNullOrEmpty(groupCode) || string.IsNullOrEmpty(groupName))
            {
                return "OK";
            }

            //重新计算
            return await _vourcherService.NewVourcherCalc("2017-1-1", "2017-12-31", groupCode, groupName);
            // return await _vourcherService.NewVourcherCalc("2017-1-1", "2017-12-31", "00040001", "南发集团");

        }

        /// <summary>
        /// 重新计算指定期间
        /// </summary>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <param name="groupCode"></param>
        /// <param name="groupName"></param>
        /// <returns></returns>
        // GET api/values/5
        [HttpPost("{id}")]
        public async Task<string> NewCount(string startDate, string endDate, string groupCode, string groupName)
        {
            return await _vourcherService.NewVourcherCalc("2017-1-1", "2017-12-31", "0004", "浦发集团");
        }

        /// <summary>
        /// 定时提数接口
        /// </summary>
        /// <param name="value"></param>
        /// <param name="logger"></param>
        /// <param name="factory"></param>
        /// <returns></returns>
        // POST api/values
        [HttpPost]
        public async Task<string> Post([FromBody]JsonData value, [FromServices]ILogger<ValuesController> logger, [FromServices]ILoggerFactory factory)
        {
            if (value == null)
                return "数据未传进来!";

            // factory.CreateLogger("NewFile").LogInformation(value.GroupCode+"\r\n"+value.Vourchers+"\r\n"+value.Balances);
            return await _vourcherService.Vourcher(value);
        }


        /// <summary>
        /// 测试新项目bug接口
        /// </summary>
        /// <returns></returns>
        [HttpGet("UnitTestNewProject")]
        public async Task<string> UnitTestNewProject()
        {
            var vourchers = _context.PdVourchers.Where(t => t.凭证ID == "646WXT3jQeSp5WhaNyDHqyZS4B4=" && t.分录序号 == 1).Include(u => u.凭证辅助账).ThenInclude(u => u.核算项).ToList();

            return await _vourcherService.WarninCalculation(vourchers, "0004", "浦发集团", false);
        }



        /// <summary>
        /// 测试余额接口公司名称是否匹配
        /// </summary>
        /// <param name="groupId"></param>
        /// <returns></returns>
        [HttpGet("UnitBalance")]
        public string UnitBalance(string groupId)
        {
            var s = "\r\n";
            var obj = @"上海陆家嘴金融贸易区开发股份有限公司
                        上海陆家嘴金融贸易区联合发展有限公司
                        上海明城酒店管理有限公司
                        上海联浦资产管理有限公司
                        天津陆津房地产开发有限公司
                        天津陆家嘴酒店管理有限公司
                        上海陆家嘴物业管理有限公司
                        上海宝山陆家嘴物业管理有限公司
                        天津陆津物业服务有限公司
                        上海陆家嘴贝思特物业管理有限公司
                        上海陆家嘴开发大厦有限公司
                        陆家嘴软件产业发展有限公司
                        陆家嘴城建开发有限责任公司
                        上海陆家嘴资产管理有限公司
                        上海陆家嘴商业经营管理有限公司
                        上海商骋经营管理有限公司
                        天津陆津商业经营管理有限公司
                        上海九六广场商业经营管理有限公司
                        上海陆家嘴商务广场有限公司
                        上海陆家嘴房产开发有限公司
                        上海东恒商务咨询有限公司
                        上海东丹置业有限公司
                        上海陆家嘴东怡酒店管理有限公司
                        上海陆家嘴展览发展有限公司
                        上海陆家嘴金地停车场建设管理有限公司
                        上海佳二实业投资有限公司
                        上海佳仁资产管理有限公司
                        上海佳裕资产管理有限公司
                        上海佳章资产管理有限公司
                        上海佳纪资产管理有限公司
                        上海佳项资产管理有限公司
                        上海佳卫资产管理有限公司
                        上海佳湾投资管理有限公司
                        苏州绿岸房地产开发有限公司
                        上海佳精置业有限公司
                        上海纯景实业发展有限公司
                        上海申万置业有限公司
                        上海陆家嘴置业发展有限公司
                        上海陆家嘴浦江置业有限公司
                        上海前滩实业发展有限公司
                        上海前绣实业有限公司
                        上海佳三资产管理有限公司
                        上海智依投资有限公司
                        上海智俩投资管理有限公司
                        上海智叁投资有限公司
                        天津陆家嘴置业有限公司
                        上海陆川建设发展有限公司
                        上海陆家嘴金融发展有限公司".Replace(" ", "").Split(s); //字符串转数组 ;


            var balances = _context.PdBalances.Where(t => t.GroupId == groupId).ToList();

            //  if(vourchers.)
            var count = 1;
            StringBuilder sb = new StringBuilder();
            foreach (var item in obj)
            {
                if (balances.Any(t => t.CompanyName == item))
                {
                    sb.Append($"序号{count}---{item}匹配到{s}");
                }
                else
                {
                    var itemSub = item.Replace("有限公司", "");
                    var balance = balances.FirstOrDefault(t => t.CompanyName.Contains(itemSub));
                    if (balance != null)
                    {
                        sb.Append($"序号{count}---{item}---------{itemSub}《不完全匹配到》数据库中的名字【{balance.CompanyName}】{s}");
                    }
                    else
                    {
                        if (itemSub.Contains("发展") || itemSub.Contains("管理") || itemSub.Contains("投资"))
                        {
                            if (itemSub.Contains("发展"))
                            {
                                balance = balances.FirstOrDefault(t => t.CompanyName.Contains(itemSub.Replace("发展", "")));
                                if (balance != null)
                                {
                                    sb.Append($"序号{count}---{item}---------{itemSub}《不完全匹配到》数据库中的名字【{balance.CompanyName}】{s}");
                                }
                                else
                                {
                                    sb.Append($"序号{count}---{item}【匹配不到】{s}");
                                }
                            }

                            if (itemSub.Contains("管理"))
                            {
                                balance = balances.FirstOrDefault(t => t.CompanyName.Contains(itemSub.Replace("管理", "").Replace("发展", "")));
                                if (balance != null)
                                {
                                    sb.Append($"序号{count}---{item}---------{itemSub}《不完全匹配到》数据库中的名字【{balance.CompanyName}】{s}");
                                }
                                else
                                {
                                    sb.Append($"序号{count}---{item}【匹配不到】{s}");
                                }
                            }

                            if (itemSub.Contains("投资"))
                            {
                                balance = balances.FirstOrDefault(t => t.CompanyName.Contains(itemSub.Replace("投资", "").Replace("管理", "").Replace("发展", "")));
                                if (balance != null)
                                {
                                    sb.Append($"序号{count}---{item}---------{itemSub}《不完全匹配到》数据库中的名字【{balance.CompanyName}】{s}");
                                }
                                else
                                {
                                    sb.Append($"序号{count}---{item}【匹配不到】{s}");
                                }
                            }
                            if (itemSub.Contains("建设"))
                            {
                                balance = balances.FirstOrDefault(t => t.CompanyName.Contains(itemSub.Replace("建设", "").Replace("投资", "").Replace("管理", "").Replace("发展", "")));
                                if (balance != null)
                                {
                                    sb.Append($"序号{count}---{item}---------{itemSub}《不完全匹配到》数据库中的名字【{balance.CompanyName}】{s}");
                                }
                                else
                                {
                                    sb.Append($"序号{count}---{item}【匹配不到】{s}");
                                }
                            }
                        }
                        else
                        {
                            sb.Append($"序号{count}---{item}【匹配不到】{s}");
                        }
                    }
                }
                count++;
            }
            return sb.ToString();
            //return await _vourcherService.WarninCalculation(vourchers, "0004", "浦发集团", false);
        }
    }
}
